package solution;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/*
* 242
* */
public class SsAnagram {
    /*
    * 使用暴力求解，排序字符
    * */
    public boolean solution1(String s, String t) {
        if (s.length() != t.length()){
            return false;
        }

        char[] char1 = s.toCharArray();
        char[] char2 = t.toCharArray();
        Arrays.sort(char1);
        Arrays.sort(char2);
        return Arrays.equals(char1, char2);
    }

    /*
    * 使用哈希表
    * */
    public boolean solution2(String s, String t) {
        if (s.length() != t.length()){
            return false;
        }

        Map<Character, Integer> table = new HashMap<>();
        for(int i = 0 ; i < s.length() ; i++){
            char ch = s.charAt(i);
            table.put(ch, table.getOrDefault(ch, 0) + 1);
        }

        for(int i = 0 ; i < t.length() ; i++){
            char ch = t.charAt(i);
            table.put(ch, table.getOrDefault(ch, 0) - 1);
            if (table.get(ch) < 0){
                return false;
            }
        }
        return true;
    }

    /*
    * 使用哈希映射
    * */
    public boolean solution3(String s, String t) {
        if (s.length() != t.length()){
            return false;
        }

        int[] ascii = new int[26];
        for (int i = 0; i < s.length(); i++){
            ascii[s.charAt(i) - 'a'] ++;
            ascii[t.charAt(i) - 'a'] --;

//            if (ascii[t.charAt(i) - 'a'] < 0){
//                return false;
//            }
        }

        for (int i : ascii){
            if (i != 0){
                return false;
            }
        }
        return true;
    }
}
